
class Solution:
    def distributeCookies(self, cookies: List[int], k: int) -> int:
        # 获取cookies的长度
        n = len(cookies)
        # 初始化一个长度为2^n的数组s，用于存储每个子集的和
        s = [0 for _ in range(1 << n)]
        # 遍历每个子集
        for i in range(n):
            # 遍历子集的子集
            for j in range(1 << i):
                # 计算子集的和
                s[j | 1 << i] = s[j] + cookies[i]
        # 初始化一个长度为k，每个元素为长度为2^n的数组dp，用于存储每个子集的最大值
        dp = [[inf for _ in range(1 << n)] for _ in range(k)]
        # 初始化dp[0]为s的副本
        dp[0] = s.copy()
        # 遍历k-1次
        for i in range(1, k):
            # 遍历每个子集
            for j in range(1, 1 << n):
                # 遍历子集的子集
                for c in range(1, j):
                    # 更新dp[i][j]为子集的最大值
                    dp[i][j] = min(dp[i][j], max(s[c], dp[i - 1][j ^ c]))
        # 返回dp[-1][-1]，即最后一个子集的最大值
        return dp[-1][-1]